package com.qiguliuxing.dts.db.dao.ex;

import java.util.List;
import java.util.Map;

import com.qiguliuxing.dts.db.domain.DtsMerchantDailyStatis;
import org.apache.ibatis.annotations.Param;

import com.qiguliuxing.dts.db.bean.CategorySellAmts;
import com.qiguliuxing.dts.db.bean.DayStatis;

@SuppressWarnings("rawtypes")
public interface StatMapper {
	
	/**
	 * 统计近多少天之内的用户增长量
	 * @param daysAgo
	 * @return
	 */
	List<DayStatis> statisIncreaseUserCnt(@Param("daysAgo") int daysAgo);
	
	/**
	 * 统计近多少天之内的订单增长量
	 * @param daysAgo
	 * @return
	 */
	List<DayStatis> statisIncreaseOrderCnt(@Param("daysAgo") int daysAgo);

	/**
	 * 类目销售额统计
	 * @return
	 */
	List<CategorySellAmts> categorySellStatis();
	
	/**
	 * 用户数统计
	 * @return
	 */
	List<Map> statUser();

	/**
	 * 订单数统计
	 * @return
	 */
	List<Map> statOrder();

	/**
	 * 商品数统计
	 * @return
	 */
	List<Map> statGoods();

	/**
	 * 获取商户指定时间范围内的订单与金额
	 * @param daysAgo
	 * @param brandId
	 * @return
	 */
	List<DayStatis> recentBrandOrderStatis(@Param("daysAgo") int daysAgo, @Param("brandId") Integer brandId);


	/**
	 * 获取商户的类目销售额统计
	 * @param brandId
	 * @return
	 */
	List<CategorySellAmts> brandCategorySellStatis(@Param("brandId") Integer brandId);

	/**
	 * 商户指定日期范围内的订单统计情况
	 * @param brandId
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	DtsMerchantDailyStatis merchantOrderDailyStatis(@Param("brandId") Integer brandId, @Param("startTime") String startTime, @Param("endTime") String endTime);

	/**
	 * 基于订单表统计，优惠券减免金额不为空则认为使用了优惠券，
	 * 因为每个订单只能使用一张优惠券，所以基于订单表即可统计优惠券核销数量
	 * @param brandId
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	Long merchantDailyCouponStatis(@Param("brandId") Integer brandId, @Param("startTime") String startTime, @Param("endTime") String endTime);

	/**
	 * 商户指定日期范围内的退款订单统计
	 *  时间点基于退款订单的审批时间和状态作为依据
	 * @param brandId
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	DtsMerchantDailyStatis merchantRefundDailyStatis(Integer brandId, String startTime, String endTime);
}